home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 November / SAN CD 11-2007 CD-ROM 30.iso / pc / Software / StarryNightWidget / Starry Night.wdgt / SNW.js < prev    next >
Encoding:
Text File  |  2007-08-01  |  14.9 KB  |  131 lines

  1. //------------------------------------------------------------------------------------------- 
  2. //
  3. // Copyright © 1990-2007 by Imaginova Corp, Inc., All rights reserved.
  4. //
  5. // Contains:    Starry Night Widget:
  6. //
  7. // Author:        Ivan Pinzon
  8. //
  9. // Date            Initials    Version        Comments
  10. // ----------    ---------    ----------    ---------------------------
  11. // 2007/07/31    IPA            1.2            New
  12. //
  13. //------------------------------------------------------------------------------------------- 
  14.  
  15. var kDashboardWidgetVersion="1.20";var kWidgetID=kDashboardWidget;var kWidgetTitle="Starry Night Widget";var kLocationKey="locationKey";var kPostalCodeKey="postalCodeKey";var kTimeZoneKey="timeZoneKey";var kLatitudeKey="latitudeKey";var kLongitudeKey="longitudeKey";var kAzimuthKey="azimuthKey";var kShowStarLabelsKey="showStarLabelsKey";var kShowPlanetLabelsKey="showPlanetLabelsKey";var kShowConstellationsKey="showConstellationsKey";var kShowHorizonKey="showHorizonKey";var kShowEclipticKey="showEclipticKey";var kShowDaylightKey="showDaylightKey";var kUseDSTKey="useDSTKey";var kCollapsedKey="collapsedKey";var kTransitionKey="transitionKey";var gPostalCodePref="M5C2H4";function preOnShow()
  16. {gSituation.dateTime.setTime(new Date());refreshSituationStatus();}
  17. function postOnShow()
  18. {}
  19. function widgetProcessEvent(inKey)
  20. {var sendRequest=true;switch(inKey)
  21. {case"D":case"d":setDaylight(!gSituation.options.daylight);break;default:sendRequest=false;break;}
  22. return sendRequest;}
  23. function keyPressedBack(e)
  24. {var back=document.getElementById("back");if(back.style.display=="block"&&event.shiftKey)
  25. {var key=String.fromCharCode(e.which);switch(key)
  26. {case"t":case"T":document.getElementById("transitionsDiv").style.display=="block"?document.getElementById("transitionsDiv").style.display="none":document.getElementById("transitionsDiv").style.display="block";break;}}}
  27. function setup()
  28. {trackAction(kWidgetID,kDashboardWidgetVersion,kTrack_Initialized,false);gZoomSlider=new Control.Slider('zoomSliderHandle','zoomSliderTrack',{axis:'vertical',range:$R(kMinFOV,kMaxFOV),sliderValue:gSituation.gaze.FOV});gZoomSlider.setEnabled();gZoomSlider.options.onChange=zoomSliderChanged;gZoomSlider.options.onSlide=zoomSliderSlid;gInfoButton=new AppleInfoButton(document.getElementById("infoButton"),document.getElementById("front"),"white","white",showPrefs);gMiniChartButton=new AppleButton(document.getElementById("chartDrawerButton"),"",20,"Images/miniChartButton.png","Images/miniChartButtonOn.png",20,"","","","",0,handleChartDrawer);gSNWebButton=new AppleButton(document.getElementById("goSNWebButton"),"",22,"Images/goSNWebButton.png","Images/goSNWebButtonON.png",22,"","","","",0,goToStarryNightServer);glassFindPostalCodeButton=new AppleGlassButton(document.getElementById("findButton"),"Find",findPostalCode);glassDoneButton=new AppleGlassButton(document.getElementById("doneButton"),"Done",hidePrefs);populateAzimuthOptions();populateTransitionOptions();populateMonthsAndTime();loadPrefs();gIsCollapsed=true;var dummyEvent=document.createEvent("MouseEvents");toggleView(dummyEvent);sendMiniChartRequest();gSetupWasCalled=true;if(gRefreshTimer==null)
  29. {gRefreshTimer=setInterval("sendMiniChartRequest();",1000*gRefreshPeriod);}
  30. document.getElementById("daylightIconDiv").style.display=gSituation.options.daylight?"none":"block";document.addEventListener("keypress",keyPressed,true);document.addEventListener("keypress",keyPressedBack,true);switch(gTransitionOptionsIndexPref)
  31. {case kCubeTransition:gCompositionElemID=kCubeCompositionElemID;break;case kCoreImageTransition:gCompositionElemID=kCoreImageCompositionElemID;break;default:break;}
  32. for(i=0;i<=kTabsCount;i++)
  33. {loadTabImages('Images/tab'+i+'.png','Images/tab'+i+'ON.png',i);}
  34. setTabImage("tabImg"+gCurrentTabPref,gCurrentTabPref,true);}
  35. function generateRequest()
  36. {gSituation.useTimezoneAndUTC=true;var url=getRequestURL(kDashboardWidget,kDashboardWidgetVersion,kGenerateImageRequest,gSituation,kWidthValue,kHeightValue);return url;}
  37. function postLatLongTyping()
  38. {gSituation.location.lat=parseFloat(document.getElementById("latitudeField").value);gSituation.location.lng=parseFloat(document.getElementById("longitudeField").value);}
  39. function preFindNearestCity()
  40. {gPostalCodePref="";gPostalValidated=true;gPostalFound=true;}
  41. function postFindNearestCity()
  42. {gCurrentLocation=gUserLocationPref;setDST();}
  43. function postalTyping(event)
  44. {gPostalValidated=false;}
  45. function postalKeyPress(event)
  46. {switch(event.keyCode)
  47. {case 13:case 3:case 9:if(!gPostalValidated)
  48. {findPostalCode();}
  49. break;}}
  50. function findPostalCode()
  51. {if(window.widget)
  52. {var postalCodeElement=document.getElementById("postalCodeField");if(postalCodeElement&&postalCodeElement.value.length>0)
  53. {var postalCode=postalCodeElement.value;postalCode=postalCode.toUpperCase();postalCode=postalCode.replace(/ /g,"");postalCodeElement.value=postalCode;var url=getRequestURL(kDashboardWidget,kDashboardWidgetVersion,kSearchPostalCodeRequest,gSituation,0,0,postalCode);gFindPostalCodeHttpRequest=new XMLHttpRequest();if(gFindPostalCodeHttpRequest.overrideMimeType)
  54. {gFindPostalCodeHttpRequest.overrideMimeType('text/xml');}
  55. document.getElementById("postalStatusBack").innerText="Searching...";gFindPostalCodeHttpRequest.onreadystatechange=postalCodeCallback;gFindPostalCodeHttpRequest.open('GET',url,true);gFindPostalCodeHttpRequest.setRequestHeader("Cache-Control","no-cache");gFindPostalCodeHttpRequest.send(null);gPostalFound=false;}}}
  56. function postalCodeCallback()
  57. {if(gFindPostalCodeHttpRequest.readyState==4)
  58. {if(gFindPostalCodeHttpRequest.status==200)
  59. {var replyFields=new Array();replyFields=gFindPostalCodeHttpRequest.responseText.split('|');if(replyFields[2]!="Not Found")
  60. {gPostalFound=true;document.getElementById("latitudeField").value=replyFields[0];document.getElementById("longitudeField").value=replyFields[1];document.getElementById("locationBack").innerText=replyFields[2];gSituation.location.timezone=replyFields[3];document.getElementById("postalStatusBack").innerText="";gLatLongValidated=true;savePrefs();setDST();}
  61. else
  62. {document.getElementById("postalStatusBack").innerText=replyFields[2];}
  63. gPostalValidated=true;delete replyFields;}
  64. else if(gFindPostalCodeHttpRequest.status==404)
  65. {alert("URL doesn't exist");}
  66. else
  67. {alert("There was a problem with the Postal Code request: "+gFindPostalCodeHttpRequest.status);alert(gFindPostalCodeHttpRequest.statusText);}}}
  68. function hidePrefs()
  69. {if(!gLatLongValidated)
  70. {findNearestCity();}
  71. savePrefs();var front=document.getElementById("front");var back=document.getElementById("back");if(window.widget)
  72. {if(!gIsCollapsed)
  73. {window.resizeTo(kMaxWidgetWidth,kMaxWidgetHeight);}
  74. widget.prepareForTransition("ToFront");}
  75. back.style.display="none";front.style.display="block";if(window.widget)
  76. {setTimeout('widget.performTransition();',0);if(gIsCollapsed)
  77. {window.resizeTo(kMinWidgetWidth,kMinWidgetHeight);}}
  78. setTimeout(prepareForNewTransition,80);gComposition.showLoading=true;restoreGaze();setTimeout(sendMiniChartRequest,100);resetRefreshTimer();startTickerTimer();restoreTickerScroll();document.getElementById("locationFront").innerText=gUserLocationPref;document.getElementById("daylightIconDiv").style.display=gSituation.options.daylight?"none":"block";setInfoButtonStyle();refreshSituationStatus();}
  79. function loadPrefs()
  80. {if(window.widget)
  81. {gIsCollapsed=(setPreference(widget.preferenceForKey(createKey(kCollapsedKey)),kYES)==kYES)?true:false;gTransitionOptionsIndexPref=setPreference(widget.preferenceForKey(createKey(kTransitionKey)),kFadeInOut);gAzimuthOptionsIndexPref=setPreference(widget.preferenceForKey(createKey(kAzimuthKey)),kSouthIndex);gUserLocationPref=setPreference(widget.preferenceForKey(createKey(kLocationKey)),"Toronto, Canada");gPostalCodePref=setPreference(widget.preferenceForKey(createKey(kPostalCodeKey)),"M5C2H4");gSituation.location.lat=setPreference(widget.preferenceForKey(createKey(kLatitudeKey)),kDefaultLatitude);gSituation.location.lng=setPreference(widget.preferenceForKey(createKey(kLongitudeKey)),kDefaultLongitude);gSituation.location.timezone=setPreference(widget.preferenceForKey(createKey(kTimeZoneKey)),kDefaultTimezone);gSituation.location.useDST=setPreference(widget.preferenceForKey(createKey(kUseDSTKey)),kNO)==kYES?true:false;;gSituation.options.starLabels=setPreference(widget.preferenceForKey(createKey(kShowStarLabelsKey)),kYES)==kYES?true:false;gSituation.options.planetLabels=setPreference(widget.preferenceForKey(createKey(kShowPlanetLabelsKey)),kYES)==kYES?true:false;gSituation.options.constellations=setPreference(widget.preferenceForKey(createKey(kShowConstellationsKey)),kYES)==kYES?true:false;gSituation.options.horizon=setPreference(widget.preferenceForKey(createKey(kShowHorizonKey)),kYES)==kYES?true:false;gSituation.options.ecliptic=setPreference(widget.preferenceForKey(createKey(kShowEclipticKey)),kNO)==kYES?true:false;gSituation.options.daylight=setPreference(widget.preferenceForKey(createKey(kShowDaylightKey)),kYES)==kYES?true:false;loadPrefsUI();setAzimuth(gAzimuthOptionsIndexPref);gSituation.gaze.alt=kDefaultAlt;gPostalFound=true;gLatLongValidated=true;gPostalValidated=true;}}
  82. function loadPrefsUI()
  83. {document.getElementById("locationFront").innerText=gUserLocationPref;document.getElementById("locationBack").innerText=gUserLocationPref;document.getElementById("postalCodeField").value=gPostalCodePref;document.getElementById("postalStatusBack").innerText="";document.getElementById("latitudeField").value=gSituation.location.lat;document.getElementById("longitudeField").value=gSituation.location.lng;document.getElementById("showStarLabelsChk").checked=gSituation.options.starLabels;document.getElementById("showLabelsChk").checked=gSituation.options.planetLabels;document.getElementById("showConstellationsChk").checked=gSituation.options.constellations;document.getElementById("showHorizonChk").checked=gSituation.options.horizon;document.getElementById("showEclipticChk").checked=gSituation.options.ecliptic;document.getElementById("showDaylightChk").checked=gSituation.options.daylight;document.getElementById('azimuthOptions').options[gAzimuthOptionsIndexPref].selected=true;document.getElementById('transitionOptions').options[gTransitionOptionsIndexPref].selected=true;document.getElementById('monthOptions').options[gSituation.dateTime.getUTCMonth()].selected=true;populateDays(gSituation.dateTime.getUTCFullYear(),gSituation.dateTime.getUTCMonth());document.getElementById('dayOptions').options[gSituation.dateTime.getDate()-1].selected=true;document.getElementById("yearField").value=gSituation.dateTime.getFullYear();var hour=gSituation.dateTime.getHours();var amPm=hour>11?kPm:kAm;if(hour>11)
  84. {hour-=12;}
  85. document.getElementById("timeOptions").options[hour].selected=true;document.getElementById('amPmOptions').options[amPm].selected=true;document.getElementById("useDSTChk").checked=gSituation.location.useDST;}
  86. function savePrefs()
  87. {if(window.widget)
  88. {savePrefsFromUI();widget.setPreferenceForKey(gUserLocationPref,createKey(kLocationKey));widget.setPreferenceForKey(gPostalCodePref,createKey(kPostalCodeKey));widget.setPreferenceForKey(gSituation.location.lat,createKey(kLatitudeKey));widget.setPreferenceForKey(gSituation.location.lng,createKey(kLongitudeKey));widget.setPreferenceForKey(gSituation.location.timezone,createKey(kTimeZoneKey));widget.setPreferenceForKey(gSituation.location.useDST,createKey(kUseDSTKey));widget.setPreferenceForKey(gAzimuthOptionsIndexPref,createKey(kAzimuthKey));widget.setPreferenceForKey(gSituation.options.starLabels,createKey(kShowStarLabelsKey));widget.setPreferenceForKey(gSituation.options.planetLabels,createKey(kShowPlanetLabelsKey));widget.setPreferenceForKey(gSituation.options.constellations,createKey(kShowConstellationsKey));widget.setPreferenceForKey(gSituation.options.horizon,createKey(kShowHorizonKey));widget.setPreferenceForKey(gSituation.options.ecliptic,createKey(kShowEclipticKey));widget.setPreferenceForKey(gSituation.options.daylight,createKey(kShowDaylightKey));widget.setPreferenceForKey(gTransitionOptionsIndexPref,createKey(kTransitionKey));}}
  89. function savePrefsFromUI()
  90. {var front=document.getElementById("front");var back=document.getElementById("back");if(back&&back.style.display=="block")
  91. {switch(gCurrentTabPref)
  92. {case kLocationTabView:gUserLocationPref=document.getElementById("locationBack").innerText;if(gPostalValidated&&gPostalFound)
  93. {gPostalCodePref=document.getElementById("postalCodeField").value;}
  94. gSituation.location.useDST=document.getElementById("useDSTChk").checked;break;case kOptionsTabView:gSituation.options.starLabels=document.getElementById("showStarLabelsChk").checked;gSituation.options.planetLabels=document.getElementById("showLabelsChk").checked;gSituation.options.constellations=document.getElementById("showConstellationsChk").checked;gSituation.options.horizon=document.getElementById("showHorizonChk").checked;gSituation.options.ecliptic=document.getElementById("showEclipticChk").checked;gSituation.options.daylight=document.getElementById("showDaylightChk").checked;break;default:break;}}
  95. else if(front&&front.style.display=="block")
  96. {gUserLocationPref=document.getElementById("locationFront").innerText;}
  97. if(gLatLongValidated&&gCurrentTabPref==kLocationTabView)
  98. {gSituation.location.lat=document.getElementById("latitudeField").value;gSituation.location.lng=document.getElementById("longitudeField").value;}}
  99. function setDaylight(inDaylight)
  100. {gSituation.options.daylight=inDaylight;document.getElementById("daylightIconDiv").style.display=gSituation.options.daylight?"none":"block";setInfoButtonStyle();}
  101. function setDST()
  102. {gSituation.location.useDST=currentlyExperiencingDST(gSituation);document.getElementById("useDSTChk").checked=gSituation.location.useDST;}
  103. function dateChanged(select)
  104. {var hour=0;switch(select.id)
  105. {case"monthOptions":gSituation.dateTime.setUTCFullYear(document.getElementById("yearField").value);gSituation.dateTime.setUTCMonth(select.selectedIndex);populateDays(gSituation.dateTime.getFullYear(),gSituation.dateTime.getUTCMonth());break;case"dayOptions":gSituation.dateTime.setUTCDate(select.selectedIndex);break;case"timeOptions":hour=select.selectedIndex;if(document.getElementById('amPmOptions').selectedIndex==kAm&&hour>11)
  106. {hour-=12;}
  107. else if(document.getElementById('amPmOptions').selectedIndex==kPm&&hour<12)
  108. {hour+=12;}
  109. gSituation.dateTime.setHours(hour);break;case"amPmOptions":hour=gSituation.dateTime.getHours();if(select.selectedIndex==kAm&&hour>11)
  110. {hour-=12;}
  111. else if(select.selectedIndex==kPm&&hour<12)
  112. {hour+=12;}
  113. gSituation.dateTime.setHours(hour);break;}}
  114. function yearTyping(event)
  115. {var year=document.getElementById("yearField").value;if(!isNaN(year))
  116. {gSituation.dateTime.setUTCFullYear(year);populateDays(gSituation.dateTime.getUTCFullYear(),gSituation.dateTime.getUTCMonth());}
  117. else
  118. {document.getElementById("yearField").value=gSituation.dateTime.getUTCFullYear();}}
  119. function yearKeyPress(event)
  120. {switch(event.keyCode)
  121. {case 13:case 3:case 9:break;}}
  122. function setInfoButtonStyle()
  123. {if(gIsCollapsed)
  124. {gInfoButton.setStyle("white","white");}
  125. else if(gSituation.options.daylight)
  126. {gInfoButton.setStyle("black","white");}
  127. else
  128. {gInfoButton.setStyle("white","black");}}
  129. function refreshWidgetStuff()
  130. {if(Math.abs(gZoomSlider.value-gSituation.gaze.FOV)>kEpsilon)
  131. {gZoomSlider.setValue(gSituation.gaze.FOV);}}